home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 135_01.zip / QPM.CSM < prev    next >
Text File  |  1993-06-10  |  3KB  |  183 lines

  1. ;
  2. ;    qpm.csm---a collection of BDSc language
  3. ;    routines for prime number research.
  4. ;
  5. ;    by Hugh S. Myers
  6. ;
  7. ;    4/4/84
  8. ;    4/6/84
  9. ;
  10.  
  11.     include <bds.lib>
  12.  
  13. ;
  14. ;    qprime(s)---a quick check for primality.  Returns absolute
  15. ;    true or false on a string 's'<65536 and absolute false 
  16. ;    or maybe on all others.  Does a modified sieve test.
  17. ;
  18.     function    qprime
  19.     external    gets1,qpm
  20.  
  21.     call    gets1    ;de->s1 or s
  22.     jmp    qpm    ;main body of function
  23.  
  24.     endfunc
  25. ;
  26. ;    sqprime(n)---a quick check for primality.  Returns absolute
  27. ;    true or false on an integer 'n'<65536 and absolute false 
  28. ;    or maybe on all others.  Does a modified sieve test.  Initial
  29. ;    code converts integer at (hl) to vli format.
  30. ;
  31.     function    sqprime
  32.     external    qpm
  33.  
  34.     call    ma1toh    ;get n
  35.     mov    a,h
  36.     ora    a
  37.     jz    l1
  38.     cpi    80h
  39.     jc    l2
  40.     call    cmh+1    ;compliment hl
  41.     mov    a,h
  42.     ora    a
  43.     mvi    a,81h
  44.     jz    l3
  45.     inr    a
  46.  
  47. l3:
  48.     sta    var
  49.     shld    var+1
  50.     lxi    d,var
  51.     jmp    qpm
  52.  
  53. l1:
  54.     mvi    a,1
  55.     jmp    l3
  56.  
  57. l2:
  58.     mvi    a,2
  59.     jmp    l3
  60.  
  61. var:    db    0,0,0
  62.  
  63.     endfunc
  64. ;
  65. ;    qpm---main body of qprime(s) and sqprime(n).
  66. ;
  67.     function    qpm
  68.  
  69.     external    pare,moov,modulus
  70.  
  71. true    equ    1
  72. false    equ    0
  73. maybe    equ    -1
  74.  
  75.     push    b
  76.     lxi    h,op1
  77.     call    moov
  78.     lxi    h,limit
  79.     call    pare
  80.     jnc    next
  81.     lxi    h,ptable
  82.     shld    ptr
  83.     inx    d    ;point de at length byte+1
  84.  
  85. lookup:
  86.     call    getop
  87.     ora    a
  88.     jz    next
  89.     inx    h    ;point hl at length byte+1 of nth prime
  90.     ldax    d    ;get value from at de
  91.     cmp    m    ;compare with nth prime
  92.     jz    rettrue
  93.     jmp    lookup
  94.  
  95. next:
  96.     lxi    h,ptable
  97.     shld    ptr
  98.  
  99. mtest:
  100.     lxi    d,op1
  101.     lxi    h,op2
  102.     call    moov
  103.     xchg
  104.     call    getop
  105.     ora    a
  106.     jz    possible
  107.     call    modulus
  108.     ldax    d
  109.     ora    a
  110.     jz    retfalse
  111.     jmp    mtest
  112.  
  113. possible:
  114.     lxi    d,op1
  115.     lxi    h,ulimit
  116.     call    pare
  117.     jnc    retmaybe
  118.  
  119. rettrue:
  120.     lxi    h,true
  121.     jmp    retn
  122.  
  123. retmaybe:
  124.     lxi    h,maybe
  125.     jmp    retn
  126.  
  127. retfalse:
  128.     lxi    h,false
  129.  
  130. retn:
  131.     pop    b
  132.     ret
  133. ;
  134. ;    getop---return HL addressed to nth member of table
  135. ;    indexed by ptr.  Increment ptr by 2.  Save DE.
  136. ;    Return A as zero if at end of table, else not.
  137. ;
  138.  
  139. getop:
  140.     push    d
  141.     lhld    ptr
  142.     mov    a,m
  143.     inx    h
  144.     shld    ptr
  145.     lxi    d,op
  146.     stax    d
  147.     dcx    d
  148.     xchg
  149.     pop    d
  150.     ora    a
  151.     ret
  152.  
  153. ;
  154. ; data
  155. ;
  156. op1:        ds    256
  157. op2:        ds    256
  158.  
  159. ulimit:        db    2,0ffh,0ffh
  160.  
  161. limit:        db    2,0,1
  162.  
  163.         db    1
  164. op:        db    0
  165.  
  166. ptr:        dw    0
  167.  
  168. ptable:        db    2,3,5,7,11
  169.         db    13,17,19,23,29
  170.         db    31,37,41,43,47
  171.         db    53,59,61,67,71
  172.         db    73,79,83,89,97
  173.         db    101,103,107,109,113
  174.         db    127,131,137,139,149
  175.         db    151,157,163,167,173
  176.         db    179,181,191,193,197
  177.         db    199,211,223,227,229
  178.         db    233,239,241,251
  179.         db    0
  180.  
  181.     endfunc
  182.     end
  183.